package com.lonely.fx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;

/**
 * @date: 2022-07-14 21:20
 * @author: ztkj-hzb
 * @description:
 **/
public class 文本框限制用户输入 extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     * 注意，文本框和文本域，对于这限制的使用方法是一样的，这里以文本框来演示
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        HBox hBox = new HBox();

        TextField textField = new TextField();

        //TODO 过滤设置
        /*textField.setTextFormatter(new TextFormatter<>(change -> {

            String text = change.getText();
            System.out.println(text);

            //过滤只接收字符
            if (text.matches("[a-z]*")) {
                return change;
            }

            return null;
        }));*/


        hBox.getChildren().add(textField);
        primaryStage.setScene(new Scene(hBox));
        primaryStage.setWidth(600);
        primaryStage.setHeight(500);
        primaryStage.show();


        textField.textProperty().addListener((observable, oldValue, newValue) -> {


            //TODO 转换设置  输入的数据--》fromString入参，处理后返回的字符串 --> toString 的入参，处理后返回string --> 文本框
            textField.setTextFormatter(new TextFormatter<>(new StringConverter<String>() {

                @Override
                public String toString(String object) {
                    return object;
                }

                @Override
                public String fromString(String string) {
                    //将所有的 5 转变成 中文五

                    if (string != null && string.contains("5")) {
                        return string.replace("5", "五");
                    }

                    return string;
                }
            }));
            textField.commitValue();

        });


    }


}
